package chemtools_logica.LN.SFBean;

import chemtools_logica.BDL.IR.BDL_SFOrdenproduccionRemote;

import chemtools_logica.BDL.IR.BDL_SFTipoproductoxOrdenProduccionRemote;
import chemtools_logica.BDL.SFBean.BDL_SFTipoproductoxOrdenProduccionBean;

import chemtools_logica.Beans.OrdenproduccionBean;

import chemtools_logica.Beans.OrdenproduccionxTipoproduccionBean;

import chemtools_logica.Entidades.Laboratorio;
import chemtools_logica.Entidades.Ordenproduccion;

import chemtools_logica.Entidades.Tipoproducto;
import chemtools_logica.Entidades.Tipoproductoxordenproduccion;
import chemtools_logica.Entidades.TipoproductoxordenproduccionPK;
import chemtools_logica.Entidades.Usuario;

import chemtools_logica.LN.IL.LN_SFOrdenproduccionLocal;
import chemtools_logica.LN.IR.LN_SFOrdenproduccionRemote;

import java.sql.Timestamp;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import javax.ejb.EJB;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless(name = "LN_SFOrdenproduccion", mappedName = "map-LN_SFOrdenproduccion")
public class LN_SFOrdenproduccionBean implements LN_SFOrdenproduccionRemote, LN_SFOrdenproduccionLocal {
    @Resource
    SessionContext sessionContext;
    @PersistenceContext(unitName = "Chemtools_Logica")
    private EntityManager em;

    @EJB
    BDL_SFOrdenproduccionRemote bDL_SFOrdenproduccionRemote;
    @EJB
    BDL_SFTipoproductoxOrdenProduccionRemote bDL_SFTipoproductoxOrdenProduccionRemote;

    public List<OrdenproduccionBean> allOrdenproduccion() {
        List<Ordenproduccion> listaEntidad = bDL_SFOrdenproduccionRemote.getOrdenproduccionFindAll();
        List<OrdenproduccionBean> listaBean = new ArrayList<OrdenproduccionBean>();

        listaBean = convertListEntitytoBean(listaEntidad);

        return listaBean;
    }

    public List<OrdenproduccionBean> getOrdenProduccionBusqueda(OrdenproduccionBean bean) {
        List<Ordenproduccion> listaEntidad = bDL_SFOrdenproduccionRemote.getAllOrdenProduccion(bean);
        List<OrdenproduccionBean> listaBean = new ArrayList<OrdenproduccionBean>();

        listaBean = convertListEntitytoBean(listaEntidad);

        return listaBean;
    }

    public void edtiOrdenProd(OrdenproduccionBean beanOrdenProd) {

        Ordenproduccion entidad = convertBeantoEntity(beanOrdenProd, 0);

        bDL_SFOrdenproduccionRemote.mergeOrdenproduccion(entidad);

    }


    public List<OrdenproduccionBean> convertListEntitytoBean(List<Ordenproduccion> listaEntidad) {
        List<OrdenproduccionBean> listaBean = new ArrayList<OrdenproduccionBean>();

        for (Ordenproduccion entidad : listaEntidad) {

            OrdenproduccionBean bean = convertEntitytoBean(entidad);
            listaBean.add(bean);

        }

        return listaBean;

    }

    public void addOrdenProd(OrdenproduccionBean beanOrdenProd) {

        Ordenproduccion entidad = convertBeantoEntity(beanOrdenProd, 1);

        bDL_SFOrdenproduccionRemote.persistOrdenproduccion(entidad);

    }

    public void addOrdenProd1(OrdenproduccionBean beanOrdenProd, List<OrdenproduccionxTipoproduccionBean> ordenTipo) {
        Ordenproduccion entidad = convertBeantoEntity(beanOrdenProd, 1);
        int id = bDL_SFOrdenproduccionRemote.insertOrdenProduc(entidad);
        List<Tipoproductoxordenproduccion> tipoOr = convertBeanToEntityTipoProdcutoOrdenProduccion(ordenTipo);
        for (Tipoproductoxordenproduccion entidad1 : tipoOr) {
            Ordenproduccion op = new Ordenproduccion();
            op.setIdOrdenProduccion(id);
            entidad1.setOrdenproduccion(op);
            bDL_SFTipoproductoxOrdenProduccionRemote.mergeTipoproductoxordenproduccion(entidad1);
        }
    }

    public boolean idDuplicado(int id) {
        boolean tOf = bDL_SFOrdenproduccionRemote.existeIDOrdenProduccion(id);
        return tOf;
    }

    public List<Tipoproductoxordenproduccion> convertBeanToEntityTipoProdcutoOrdenProduccion(List<OrdenproduccionxTipoproduccionBean> listaBean) {
        List<Tipoproductoxordenproduccion> listaEntidad = new ArrayList<Tipoproductoxordenproduccion>();

        for (OrdenproduccionxTipoproduccionBean bean : listaBean) {
            Tipoproductoxordenproduccion entidad = new Tipoproductoxordenproduccion();
            Tipoproducto entidadTP = new Tipoproducto();

            entidad.setCantidad(bean.getCantidad());
            entidad.setConformidad(bean.getConformidad());

            entidadTP.setIdTipoProducto(bean.getTipoproducto().getIdTipoProducto());
            entidad.setTipoproducto(entidadTP);

            listaEntidad.add(entidad);
        }

        return listaEntidad;
    }
    
    public OrdenproduccionBean convertEntitytoBean(Ordenproduccion entidadOrdeProd){
        OrdenproduccionBean bean= new OrdenproduccionBean();
        
            bean.setIdOrdenProduccion(entidadOrdeProd.getIdOrdenProduccion());
            bean.setComentario(entidadOrdeProd.getComentario());
            bean.setEstado(entidadOrdeProd.getEstado());
            bean.setFechaRegistro(entidadOrdeProd.getFechaRegistro());

            bean.setIdLaboratorio(entidadOrdeProd.getLaboratorio().getIdLaboratorio());
            bean.setNombreLaboratorio(entidadOrdeProd.getLaboratorio().getNombre());

            bean.setIdUsuario(entidadOrdeProd.getUsuario().getIdUsuario());
            bean.setNombreUsuario(entidadOrdeProd.getUsuario().getNombre_Usuario());

            if (entidadOrdeProd.getEstado() == 0) {
                bean.setStyleEstado("background-color:#EAB7B7;color:#675a5a;");
            }else if(entidadOrdeProd.getEstado() == 1){
                bean.setStyleEstado("background-color:#C9E5F6;color:#60B436;");
            }else if(entidadOrdeProd.getEstado() == 2){
                bean.setStyleEstado("background-color:#C9E5F6;color:#c1ffff;");
            }else if(entidadOrdeProd.getEstado() == 3){
                bean.setStyleEstado("background-color:#C9E5F6;color:#dbbff6;");
            }else if(entidadOrdeProd.getEstado() == 4){
                bean.setStyleEstado("background-color:#C9E5F6;color:#f4e1b9;");
            } else {
                bean.setStyleEstado("background-color:#C9E5F6;color:#675a5a;");
            }
        return bean;
    }

    //AGREGAR = 1, EDITAR = 0
    public Ordenproduccion convertBeantoEntity(OrdenproduccionBean beanOrdenProd, int opccion) {
        Ordenproduccion entidad = new Ordenproduccion();
        Laboratorio entidadLab = new Laboratorio();
        Usuario entidadUsu = new Usuario();

        if (opccion == 0) {
            entidad.setIdOrdenProduccion(beanOrdenProd.getIdOrdenProduccion());
        }
        entidad.setEstado(beanOrdenProd.getEstado());

        Timestamp fRegistro = new Timestamp(beanOrdenProd.getFechaRegistro().getTime());

        entidad.setFechaRegistro(fRegistro);

        entidad.setImagen(beanOrdenProd.getImagen());
        entidad.setComentario(beanOrdenProd.getComentario());

        entidadLab.setIdLaboratorio(beanOrdenProd.getIdLaboratorio());
        entidad.setLaboratorio(entidadLab);

        entidadUsu.setIdUsuario(beanOrdenProd.getIdUsuario());
        entidad.setUsuario(entidadUsu);

        return entidad;
    }

    public boolean labTieneOrdProd(int idLaboratorio) {
        return bDL_SFOrdenproduccionRemote.labTieneOrdProd(idLaboratorio);
    }

    public List<OrdenproduccionBean> getOrdenProduccionxLab(OrdenproduccionBean bean) {
        List<Ordenproduccion> listaEntidad = bDL_SFOrdenproduccionRemote.getAllOrdenProduccion(bean);
        List<OrdenproduccionBean> listaBean = new ArrayList<OrdenproduccionBean>();
        listaBean = ListEntitytoBean(listaEntidad);
        return listaBean;
    }

    private List<OrdenproduccionBean> ListEntitytoBean(List<Ordenproduccion> listaEntidad) {
        List<OrdenproduccionBean> lista = new ArrayList<OrdenproduccionBean>();
        OrdenproduccionBean bean;
        for (Ordenproduccion entidadOrdeProd : listaEntidad) {
            bean = new OrdenproduccionBean();
            bean.setIdOrdenProduccion(entidadOrdeProd.getIdOrdenProduccion());
            bean.setComentario(entidadOrdeProd.getComentario());
            bean.setEstado(entidadOrdeProd.getEstado());
            bean.setFechaRegistro(entidadOrdeProd.getFechaRegistro());

            bean.setIdLaboratorio(entidadOrdeProd.getLaboratorio().getIdLaboratorio());
            bean.setNombreLaboratorio(entidadOrdeProd.getLaboratorio().getNombre());

            bean.setIdUsuario(entidadOrdeProd.getUsuario().getIdUsuario());
            bean.setNombreUsuario(entidadOrdeProd.getUsuario().getNombre_Usuario());

            if (entidadOrdeProd.getEstado() == 0) {
                bean.setStyleEstado("background-color:#EAB7B7;color:#675a5a;");
            } else {
                bean.setStyleEstado("background-color:#C9E5F6;color:#675a5a;");
            }
            lista.add(bean);
        }
        return lista;
    }
}
